Set Stop {R}←X ⎕STOP Y

Y must be a simple character scalar or vector which is taken to be the name of a visible defined function or operator.  X must be a simple non-negative integer scalar or vector.  R is a simple integer vector of non-negative elements.  X identifies the numbers of lines in the function or operator named by Y on which a stop control is to be placed.  Numbers outside the range of line numbers in the function or operator (other than 0) are ignored.  The number 0 indicates that a stop control is to be placed immediately prior to exit from the function or operator.  If X is empty, all existing stop controls are cancelled.  The value of X is independent of ⎕IO.

R is a vector of the line numbers on which a stop control has been placed in ascending order.  The result is suppressed unless it is explicitly used or assigned.

Examples

      ⊢(0,⍳10) ⎕STOP 'FOO'
0 1

Existing stop controls in the function or operator named by Y are cancelled before new stop controls are set:

      ⊢1 ⎕STOP 'FOO'
1

All stop controls may be cancelled by giving X an empty vector:

      ⍴'' ⎕STOP 'FOO'
0
 
      ⍴⍬ ⎕STOP 'FOO'
0

Attempts to set stop controls in a locked function or operator are ignored.

      ⎕LOCK'FOO'
 
      ⊢0 1 ⎕STOP'FOO'

The effect of ⎕STOP when a function or operator is invoked is to suspend execution at the beginning of any line in the function or operator on which a stop control is placed immediately before that line is executed, and immediately before exiting from the function or operator if a stop control of 0 is set.  Execution may be resumed by a branch expression.  A stop control interrupt (1001) may also be trapped - see Trap Event .

Example

      ⎕FX'R←FOO' 'R←10'
 
      0 1 ⎕STOP'FOO'
 
      FOO
FOO[1]
 
      R
VALUE ERROR
      R
      ^
 
      →1
FOO[0]
 
      R
10
 
      →⎕LC
10